<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
    "use strict";
	// - 关于this
	// >  箭头函数没有自己的this，箭头函数内部的this并不是调用时候指向的对象,而是定义时指向的对象
	{
		// 1- this是内置的
		// console.log(this===window);// window
        // var a = 1;
		// console.log(a,window.a,this.a)

        // 2- this在函数中
        // 在普通函数中this指向是在调用时决定的
        // function fn(){
		// 	console.log(this===window);
        // }
		// window.fn();

        // const obj = {
		// 	fn:function(){
		// 		console.log(this);
        //     }
        // }
		// // obj.fn();
        // const fn2 = obj.fn;
		// fn2();

        // 箭头函数中的this是在定义时决定的
        // const fn = ()=>{
		// 	console.log(this);
        // }
		// fn();

        // const obj = {
		// 	fn:()=>{
		// 		console.log("obj->fn",this)
        //     }
        // }
		// obj.fn();
    }
	// - 箭头函数不能用于构造函数，也就是不能使用new关键字调用
	{
		// 普通的构造函数
        // const Box =()=>{
        //
        // }
		// new Box();
    }
	// - 箭头函数没有arguments对象
	{
		// 普通函数
        // function fn(){
		// 	console.log([...arguments]);
		// 	[...arguments].forEach(function(item){
		// 		console.log(item)
        //     })
        // }
		// fn(1,2,3,4,5)

        // 箭头函数
        // const fn = ()=>{
		// 	console.log(arguments);
        // }
		// fn();
    }
	// - 箭头函数使用call apply bind
	{
		// call apply bind 可以决定this的指向
		{
			// const obj = {
			// 	fn:function(){
			// 		console.log(this);
            //     }
            // };
			// // call
            // // function fn(a,b,c,d){
			// // 	console.log(this,a,b,c,d);// obj
            // // }
			// // // fn();
            // // // fn.call();// call接收的第一个参数决定fn中的this指向
            // // fn.call(1,2,3,4,5);// 从第二个参数开始即是真正传递过去的参数
            // obj.fn.call(100);
        }
		{
			// apply与call唯一的不同在于传递的参数格式不同
            // function fn(a,b,c,d){
			// 	console.log(this,a,b,c,d);
            // }
			// // fn.apply(1);// fn.call(1)
            // fn.apply(1,[2,3,4,5]);
        }
		{
			// bind:call apply
            // bind会返回一个函数(bind可以指定返回函数当中的this)
            // function fn(a,b,c,d){
			// 	console.log("fn",this,a,b,c,d)
            // }
			// const fn2 = fn.bind(1,100,200);
			// fn2(1000,2000);
        }
		{
			const fn = (a,b)=>{
				console.log(this,a,b);
            }
			fn.call(null,1,2);
        }
    }
</script>
</html>